package ar.edu.utn.frba.disenio.aterrizar.filtros;

import java.util.ArrayList;
import ar.edu.utn.frba.disenio.aterrizar.aerolineas.Vuelo;
import ar.edu.utn.frba.disenio.aterrizar.busquedas.BusquedaFiltrada;
import ar.edu.utn.frba.disenio.aterrizar.busquedas.CriterioBusqueda;
import ar.edu.utn.frba.disenio.aterrizar.busquedas.DecoratorFiltroOpcional;
import ar.edu.utn.frba.disenio.aterrizar.reserva.ManagerReserva;
import ar.edu.utn.frba.disenio.aterrizar.reserva.Reserva;

public class Estado extends DecoratorFiltroOpcional{

	public String estado;
	public CriterioBusqueda criterio;
	public ManagerReserva manager;
	
	public Estado(String estado, CriterioBusqueda busquedaBase, ManagerReserva manager, BusquedaFiltrada busquedaaFiltrar) {
		super(busquedaaFiltrar);
		if (estado != null) {
			this.estado = this.getEstado(estado);
			this.criterio = busquedaBase;
			this.manager = manager;
		}
	}

	@Override
	public ArrayList<Vuelo> buscarVuelos(){
		ArrayList<Vuelo> busquedaaFiltrar = busqueda.buscarVuelos();
		
		if(this.estado != null){
			ArrayList<Vuelo> retVal = new ArrayList<Vuelo>();
			retVal = busquedaaFiltrar;
			
			if(this.estado.equals("T")){
				ArrayList<Reserva> reservas = manager.getReservas();
				for(Reserva unaReserva : reservas){
					if( (unaReserva.vuelo.origen == criterio.origen) && (unaReserva.vuelo.destino == criterio.destino)
					&& (criterio.fecha.fechaEstasEntre(unaReserva.vuelo.fechaSalida, unaReserva.vuelo.fechaLlegada))){
						retVal.add(unaReserva.vuelo);
					}
				}				
			}
			
			return retVal;
		}	
		
		return busquedaaFiltrar;
	}
	
	public enum Estados {
		DISPONIBLE, TODOS
	}
	
	public String getEstado(String unEstado){
		String estado = "";
		switch (Estados.valueOf(unEstado.toUpperCase())){
		case DISPONIBLE:
			estado = "D";
			break;
		case TODOS:
			estado = "T";
			break;
		}
		return estado;
	}
}
